//
import java.sql.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.JLabel.*;
import oracle.jdbc.*;
/**<h3>TabellenAnsicht</h3>
 * Generiert die Tabelle aus dem String Array aus der Datensatz.getDaten function
 * @author Hung Nguyen Huu <hung852001@yahoo.com>
 * @author Viktor Ayzenshtadt <vsa85@gmx.de>
 * @version 0000 11.07.2011 18:16:26
 * @modified Montag 18.07.2011 00:35:00
 */
public class TabellenAnsicht {
	public static JFrame tabView(String[] resultQuery, String gebietNr, int jahrVon, int jahrBis, String geschlechtCBVal){
		/* Array holen und in eine JTable anzeigen */
		String[] spaltenName = {"Quelle", "Gebietnr.", "Jahr", "Sex", "Gesamt", "00-04", "05-09", "10-14", "15-19", "20-24", "25-29", "30-34", "35-39", "40-44", "45-49", "50-54", "55-59", "60-64", "65-69", "70-74", "75-79", "80-84", "85-89", "90-100"};

		int attr = resultQuery.length;			// Anzahl der Attibutenelemente !immer teilbar durch 24!
		int COLS = 24;					// Anzahl der Spalten
		int ROWS = resultQuery.length/COLS;		// Anzahl der Zeilen/Datensätze	
		
		if(resultQuery[0] == ""){
			JOptionPane.showMessageDialog(null, "Die Datensaetze fuer das angegebene Jahr/ die angegebenen Jahre existiert nicht!", "Fehlermeldung", JOptionPane.ERROR_MESSAGE);
		}
		
		Object[][] data = new Object[ROWS][COLS]; 	// Initialisierung
		int row = 0;	
		int col = -1; 					// Zeilen auf -1, weil bei der ersten Durchlauf auf 0 inkremetiert wird
		for (int i = 0; i < attr; i++) {		// Zeile durchlaufen!	
			col++;					// Die Attributenelemete in die Tabelle füllen
			if(col == 24){	
				row++;	
				col = 0;					
			}
			//System.out.println("attr= " + attr + " i = " + i + " row = " + row +  " col = " + col); // Testzwecken
			data[row][col] = resultQuery[i];
			
		}
		String tabLabel = "Tabellenansicht: (Gebietsnr.: " + gebietNr + " von " + jahrVon + " bis " + jahrBis + " - Geschlecht: " + geschlechtCBVal + ")"; 
		if(jahrVon == -1 && jahrBis == -1) { // beide Felder sind leer
			tabLabel = "Tabellenansicht: (Gebietsnr.: " + gebietNr +" aus allen Jahren" + " - Geschlecht: " + geschlechtCBVal + ")"; 
		}
		else if(jahrBis != 0 && jahrBis != -1 && jahrVon != -1 && jahrBis == jahrVon) {   // jahrVon = jahrBis
			tabLabel = "Tabellenansicht: (Gebietsnr.: " + gebietNr + " aus dem Jahr " + jahrVon + " - Geschlecht: " + geschlechtCBVal + ")"; 
		}
		else if(jahrVon == -1 && jahrBis != -1 && jahrBis != 0) tabLabel = "Tabellenansicht: (Gebietsnr.: " + gebietNr + " bis Jahr " + jahrBis + " - Geschlecht: " + geschlechtCBVal + ")"; 	// jahrVon = leer; jahrBis existiert
		else if(jahrVon != -1 && jahrVon != 0 && jahrBis == -1) tabLabel = "Tabellenansicht: (Gebietsnr.: " + gebietNr + " ab Jahr " + jahrVon + " - Geschlecht: " + geschlechtCBVal + ")"; 	// jahrBis = leer; jahrVon existiert

		JFrame frame = new JFrame(tabLabel);	// Frame erzeugen mit dem Label tabLable
		// Tabelle mit Inhalte rendern
		JTable table = new JTable(data, spaltenName) {		// table vom Typ JTable erzeugen
			public Component prepareRenderer(				// prepareRenderer für Zelleninhalte definieren
					TableCellRenderer renderer, int row, int column) {
				Component c = super.prepareRenderer(renderer, row, column);		
				switch(column){		// nach Spalten die Textausrichtung setzen, die ersten 4 Spalten zentriert, restl. Spalten rechtsbündig
					case 0: ((DefaultTableCellRenderer)renderer).setHorizontalAlignment(SwingConstants.CENTER);
							break;
					case 1: ((DefaultTableCellRenderer)renderer).setHorizontalAlignment(SwingConstants.CENTER);
							break;
					case 2: ((DefaultTableCellRenderer)renderer).setHorizontalAlignment(SwingConstants.CENTER);
							break;
					case 3:	((DefaultTableCellRenderer)renderer).setHorizontalAlignment(SwingConstants.CENTER);
							break;
					default:((DefaultTableCellRenderer)renderer).setHorizontalAlignment(SwingConstants.RIGHT);
							break;
				}
				return c;
			}
        };
		// TableHeader Überschrift bearbeiten/formatieren
		JTableHeader tableHeader = table.getTableHeader();
		tableHeader.setBackground(Color.YELLOW);	// Hintergrungfarbe festlegen
		tableHeader.setFont(new Font("Sans Serif", Font.BOLD, 13)); // Schrift ändern, mit new -> überschreiben!
		// Die einzelnen Spaltengröße definieren!
		TableColumn column = null;
		// Die einzelnen Spalten positionieren
		for (int i = 0; i < 24; i++) {
		    column = table.getColumnModel().getColumn(i);
		    if (i == 0){ 
				column.setPreferredWidth(100);  // 1. Spalte
			}
			if (i == 1) column.setPreferredWidth(130); // 2. Spalte
			if (i == 3) column.setPreferredWidth(35);  // 4. Spalte
			if (i == 4) column.setPreferredWidth(90);  // 5. Spalte
			//	Für die restlichen Spalten auf default!
		}
		JScrollPane scrollPane = new JScrollPane(table);// ScrollPane mit Tabelle
		table.setFillsViewportHeight(true);
		frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
		frame.setBounds(0,380,1275,500);	// Positionierung (int x, int y, int width, int height)
		frame.setVisible( true );

		return frame;					// Fenster als Rückgabewert
	}
}
